#ifndef XMLELEMENT_H
#define XMLELEMENT_H

#include "XML_global.h"

#include <string>
#include <vector>

#include "Node.h"
#include "TextNode.h"
#include "Attribute.h"

#include "fstream"
#include "sstream"
#include "string"
#include <iostream>

using namespace std;
namespace xml{

class XMLSHARED_EXPORT Element : public Node
{
    /**********************************
     *          Public
     **********************************/
    public:

        /**********************************
         *          Constructors
         **********************************/

            Element();                      //  Empty Element
            Element(string tagNam);
            Element(ifstream * f);          //  Load element from file

        /**********************************
         *          Methods
         **********************************/

            Element&    GetElementByTagName(string tagname);

            void        Save(ofstream *f);
            void        SaveTagName(ofstream *f);
            void        SaveAttributes(ofstream *f);
            void        SaveContent(ofstream *f);

        /**********************************
         *          Virtual
         **********************************/

            virtual void  Print();
            virtual string Value();

        /**********************************
         *          Properties
         **********************************/

            string                  tagName;

    /**********************************
     *          Private
     **********************************/
    private:

        /**********************************
         *          Methods
         **********************************/

            bool    LoadElement(ifstream *f);
            bool    LoadTag(ifstream * f);
            bool    LoadAttributes(ifstream * f);
            bool    LoadContent(ifstream * f);




        /**********************************
         *          Properties
         **********************************/


            vector<Attribute * >    attributes;

};
}

#endif // XMLELEMENT_H
